package cn.edu.ncu.housinghub.service;

/**
 * 系统通知服务接口
 * 用于发送各种类型的系统通知消息
 */
public interface SystemNotificationService {
    
    /**
     * 发送合同通知
     * @param tenantId 租客ID
     * @param landlordId 房东ID
     * @param contractId 合同ID
     * @param houseTitle 房源标题
     * @param notificationType 通知类型：contract_created, contract_signed, contract_rejected
     */
    void sendContractNotification(Long tenantId, Long landlordId, Long contractId, String houseTitle, String notificationType);
    
    /**
     * 发送预约通知
     * @param landlordId 房东ID
     * @param tenantId 租客ID
     * @param houseTitle 房源标题
     * @param appointmentTime 预约时间
     * @param notificationType 通知类型：appointment_created, appointment_confirmed, appointment_cancelled
     */
    void sendAppointmentNotification(Long landlordId, Long tenantId, String houseTitle, String appointmentTime, String notificationType);
    
    /**
     * 发送房源审核通知
     * @param landlordId 房东ID
     * @param houseTitle 房源标题
     * @param status 审核状态：approved, rejected
     * @param reason 拒绝原因（如果被拒绝）
     */
    void sendHouseVerificationNotification(Long landlordId, String houseTitle, String status, String reason);
    
    /**
     * 发送中介认证通知
     * @param userId 用户ID
     * @param status 认证状态：approved, rejected
     * @param reason 拒绝原因（如果被拒绝）
     */
    void sendAgentVerificationNotification(Long userId, String status, String reason);
    
    /**
     * 发送维修通知
     * @param landlordId 房东ID
     * @param tenantId 租客ID
     * @param houseTitle 房源标题
     * @param description 维修描述
     * @param notificationType 通知类型：maintenance_request, maintenance_completed
     */
    void sendMaintenanceNotification(Long landlordId, Long tenantId, String houseTitle, String description, String notificationType);
    
    /**
     * 发送退租通知
     * @param landlordId 房东ID
     * @param tenantId 租客ID
     * @param houseTitle 房源标题
     * @param notificationType 通知类型：checkout_request, checkout_approved, checkout_rejected
     */
    void sendCheckoutNotification(Long landlordId, Long tenantId, String houseTitle, String notificationType);
    
    /**
     * 发送系统公告
     * @param title 公告标题
     * @param content 公告内容
     * @param targetUserIds 目标用户ID列表（null表示全体用户）
     */
    void sendSystemAnnouncement(String title, String content, java.util.List<Long> targetUserIds);
    
    /**
     * 发送房源到期提醒
     * @param landlordId 房东ID
     * @param houseTitle 房源标题
     * @param daysLeft 剩余天数
     */
    void sendHouseExpirationReminder(Long landlordId, String houseTitle, int daysLeft);
    
    /**
     * 发送租金提醒
     * @param tenantId 租客ID
     * @param houseTitle 房源标题
     * @param amount 租金金额
     * @param dueDate 到期日期
     */
    void sendRentReminder(Long tenantId, String houseTitle, java.math.BigDecimal amount, String dueDate);
}
